package kgame5.enginex.comp {
import kgame5.enginex.EntityMessageVO;
import kgame5.enginex.ISenceWorld;
import kgame5.kgu.spacial.SpacialManager;

/**
 * @author kk
 * 状态机接口
 * 注意这个可以不添加任何fsm,只执行update()即可，比如逻辑区域
 * ~~这个接口写的不好。消息处理也混乱在其中了。为了不产生太多的类，并且保证
 * fsmBatch有发送消息的能力而作
 */
public interface ILogic {
	
	function setSenceWorld(senceWorld:ISenceWorld):void;//设置一个可被感知的世界
	//function setSpacialManager(spacialManager:SpacialManager):void;//
	
	//-更新逻辑
	function updateLogic():void;
	
	//-------------事件机制---------------
	//这个可以做好些
	//注意这里是有缺陷的，这里没有包含发送者的标志?
	//-这些发送接口，会调用Entity的dispatcheEvent向world发送事件
	function postEntityMessage(id:int,msgName:String,data:*):void;
	function broadcastEntityMessage(msgName:String,data:*):void;
	function broadcastEntityMessageByCateID(cateID:int,msgName:String,data:*):void;
	//都某特定型号物品发送，比如树木型的障碍物
	function broadcastEntityMessageByTypeID(typeID:int,msgName:String,data:*):void;
	//-事件接收
	function handleEntityMessage(mvo:EntityMessageVO):void;
	
	//-切换fsm状态
	function SwitchFSMState(fsmID:int,stateID:int,data:Object=null):void;
}
}
